﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using turnos.core.util;
using turnos.core.modelo;

namespace turnos.escritorio
{
    public partial class frmFinalizarTurnos : Form
    {
        private AgendaDeTurnos _agenda;

        public AgendaDeTurnos AgendaSeleccionada
        {
            get { return _agenda; }
            set { _agenda = value; }
        }
        public frmFinalizarTurnos()
        {
            InitializeComponent();
        }

        private List<DataGridViewColumn> columnas_agenda()
        {
            List<DataGridViewColumn> retorno = new List<DataGridViewColumn>();

            DataGridViewColumn c = new DataGridViewTextBoxColumn();
            c.Name = "Identificacion";
            c.DataPropertyName = "IdTurno";
            c.Visible = false;
            retorno.Add(c);

            DataGridViewColumn c1 = new DataGridViewTextBoxColumn();
            c1.Name = "Fecha";
            c1.DataPropertyName = "Fecha";

            retorno.Add(c1);

            DataGridViewColumn c2 = new DataGridViewTextBoxColumn();
            c2.Name = "Hora Inicio";
            c2.DataPropertyName = "FechayHora";
            c2.DefaultCellStyle.Format = "hh:mm";

            retorno.Add(c2);

            DataGridViewColumn c3 = new DataGridViewTextBoxColumn();
            c3.Name = "Solicitante";
            c3.Width = 400;
            c3.DataPropertyName = "SolicitanteDescripcion";

            retorno.Add(c3);

            DataGridViewColumn c4 = new DataGridViewTextBoxColumn();
            c4.Name = "Estado";
            c4.DataPropertyName = "EstadoDescripcion";

            retorno.Add(c4);

            return retorno;
        }

        

        private void cargarGrilla()
        {
            try
            {
                List<AgendaDeTurnos> agenda = Modelo.TurnosModelo.TurnosC.TraerAgendaPorFecha(dtpFecha.Value, turnosCts.ID_ESTADO_CONFIRMADO, null);
                dgvAgenda.DataSource = agenda;

                if (agenda.Count == 0)
                    throw new turnosException(turnosCts.NO_SE_GENERO_LA_AGENDA);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            
        }


        private void frmFinalizarTurnos_Load(object sender, EventArgs e)
        {
            try
            {
                Modelo.TurnosModelo.ConfigurarDGV(dgvAgenda, columnas_agenda());

                dtpFecha.Value = DateTime.Now;
                cargarGrilla();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }

        }
        /*
        private void dgvAgenda_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                seleccionaAgenda();
                if (AgendaSeleccionada.RefEstado != turnosCts.ID_ESTADO_LIBRE)
                    throw new turnosException("No esta libre el turno");
                //Abrir Carga de Solicitante
                frmAMSolicitante frmSol = new frmAMSolicitante();
                frmSol.AgendaSeleccionada = AgendaSeleccionada;
                frmSol.ShowDialog();
                cargarGrilla();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }

        }

        private void seleccionaAgenda()
        {
            int idTurno = int.Parse(dgvAgenda.CurrentRow.Cells[0].Value.ToString());
            AgendaSeleccionada = Modelo.TurnosModelo.TurnosC.TraerAgendaPorId(idTurno);
        }
        */
        
        private void btnProximo_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgvAgenda.CurrentRow == null)
                    throw new turnosException("Debe seleccionar un turno");
                int idTurno = int.Parse(dgvAgenda.CurrentRow.Cells[0].Value.ToString());
                AgendaSeleccionada = Modelo.TurnosModelo.TurnosC.TraerAgendaPorId(idTurno);
                if (AgendaSeleccionada.RefEstado != turnosCts.ID_ESTADO_CONFIRMADO)
                    throw new turnosException("No esta pendiente el turno");
                frmAMSolicitante frmFin = new frmAMSolicitante();
                frmFin.AgendaSeleccionada = AgendaSeleccionada;
                frmFin.SolicitanteActual = AgendaSeleccionada.Solicitantes;
                frmFin.CargaFecha = true;
                frmFin.ShowDialog();
                cargarGrilla();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
        }

        private void dtpFecha_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                cargarGrilla();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }

        }

        private void dgvAgenda_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                /*int idTurno = int.Parse(dgvAgenda.CurrentRow.Cells[0].Value.ToString());
                AgendaSeleccionada = Modelo.TurnosModelo.TurnosC.TraerAgendaPorId(idTurno);
                
                if (AgendaSeleccionada.RefEstado != turnosCts.ID_ESTADO_CONFIRMADO)
                    throw new turnosException("No esta pendiente el turno");
                frmAMSolicitante frmFin = new frmAMSolicitante();
                frmFin.AgendaSeleccionada = AgendaSeleccionada;
                frmFin.CargaFecha = true;
                frmFin.ShowDialog();
                cargarGrilla();*/

                if (dgvAgenda.CurrentRow != null)
                {
                    int idTurno = int.Parse(dgvAgenda.CurrentRow.Cells[0].Value.ToString());
                    AgendaSeleccionada = Modelo.TurnosModelo.TurnosC.TraerAgendaPorId(idTurno);
                    if (AgendaSeleccionada.RefEstado == turnosCts.ID_ESTADO_A_ATENDER)
                        AgendaSeleccionada.RefEstado = turnosCts.ID_ESTADO_PENDIENTE;
                    else
                        AgendaSeleccionada.RefEstado = turnosCts.ID_ESTADO_A_ATENDER;
                    Modelo.TurnosModelo.TurnosC.GuardarAgenda(AgendaSeleccionada, Modelo.TurnosModelo.Usuario.Usuario);
                    cargarGrilla();
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            cargarGrilla();
        }
    }
}
